#ifndef E210E1FB_318F_401A_A5FF_B937BB287AAF
#define E210E1FB_318F_401A_A5FF_B937BB287AAF

#include <string>
#include "center.h"
#include "pub.h"

namespace cores
{
    namespace topics
    {
        /**
         * @brief 发布者
         * 
         */
        class Publisher
        {
        private:
            /**
             * @brief 发布者名称
             *
             */
            std::string _name;

        public:
            /**
             * @brief 构造函数
             *
             * @param name 发布者名称
             */
            Publisher(const std::string& name);

            /**
             * @brief 析构函数
             *
             */
            virtual ~Publisher();

            /**
             * @brief 获取发布者名称
             *
             * @return const std::string&
             */
            const std::string& name() const;

            /**
             * @brief 发布主题数据
             *
             * @tparam T 主题数据类型
             * @param topic 主题名称
             * @param value 主题数据
             */
            template <typename T>
            void publish(const std::string& topic, const T& value)
            {
                TopicsCenter::Instance()->publish(this, topic, value);
            }
        };
    }
}

#endif /* E210E1FB_318F_401A_A5FF_B937BB287AAF */
